package com.yulian.yulianbackend.once;

import com.alibaba.excel.EasyExcel;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 导入用户信息到数据库中
 *
 * @author yulian174
 * @version 1.0
 */
public class ImportYulianUser {

    public static void main(String[] args) {
        // 模拟要引入的文件
        String fileName = "src/main/resources/testexcel.xlsx";

        // 先将要读取的文件写入
        List<XingQiuTableUserInfo> list =
                EasyExcel.read(fileName).head(XingQiuTableUserInfo.class).sheet().doReadSync();
        // 先输出整个表格的总体数量
        System.out.println("总数 = " + list.size());
        // 根据username进行分组，将相同昵称的分在一组中;
        // groupingBy中是分组对象的属性：username
        // 并行流将 stream() 改成 parallelStream() ,
        // 使用并行流注意并行流中默认的线程池 不要和其他的并行流 有冲突 ( 抢占资源 )
        Map<String, List<XingQiuTableUserInfo>> listMap =
                list.stream().collect(Collectors.groupingBy(XingQiuTableUserInfo::getUsername));

        //还可以通过过滤器过滤掉昵称为空的用户
        Map<String, List<XingQiuTableUserInfo>> listMap2 =
                list.stream()
                        .filter(xingQiuTableUserInfo -> StringUtils.isNotEmpty(xingQiuTableUserInfo.getUsername()))
                        .collect(Collectors.groupingBy(XingQiuTableUserInfo::getUsername));

        //循环遍历 Map
        for (Map.Entry<String, List<XingQiuTableUserInfo>> stringListEntry : listMap.entrySet()) {
            // 大于一就表示至少有两个人是在 同一个昵称 列中
            if (stringListEntry.getValue().size() > 1) {
                // 输出用户昵称
                System.out.println("username = " + stringListEntry.getKey());
            }
        }
//        for (XingQiuTableUserInfo data : list) {
//            System.out.println(data);
//        }
        // 不重复的昵称数就是 该 Map 中 key 的数量
        // 每个昵称单独分为一个组，而不同昵称则是由不同的 key 决定的
        System.out.println("不重复昵称数 = " + listMap.keySet().size());
    }
}
